package com.itaming.lycheeframework.security.authentication;

import java.util.Set;

/**
 * 认证上下文提供者接口
 *
 * @author A.Ming
 */
public interface AuthContextProvider<T, E> {

    /**
     * 获取用户信息
     *
     * @return 用户信息
     */
    E getUser(T userId);

    /**
     * 获取用户权限集合
     *
     * @param userId 用户ID
     * @return 权限集合
     */
    Set<String> getPermissions(T userId);

    /**
     * 获取用户角色集合
     *
     * @param userId 用户ID
     * @return 角色集合
     */
    Set<String> getRoles(T userId);

    /**
     * 是否为管理员
     *
     * @param user  用户对象
     * @param roles 角色集合
     * @return boolean
     */
    boolean isAdmin(E user, Set<String> roles);

    /**
     * 是否为超级管理员
     *
     * @param user  用户对象
     * @param roles 角色集合
     * @return boolean
     */
    boolean isSuperAdmin(E user, Set<String> roles);

}
